import pymssql
from datetime import datetime
import hashlib
from urllib.parse import urlparse

def contains_chinese(text):
    """判断字符串是否包含中文"""
    for char in text:
        if '\u4e00' <= char <= '\u9fff':
            return True
    return False

class MsSQLCrawlerDataPipeline:
    def open_spider(self, spider):
        # 连接你的 MSSQL
        self.conn = pymssql.connect(
            server='192.168.3.147',
            port=1433,
            user='sa',
            password='cde3CDE#',
            database='dms',
            charset='utf8'
        )
        self.cursor = self.conn.cursor()

    def process_item(self, item, spider):
        try:
            sql = """
            INSERT INTO dbo.crawler_data_source (
                keyword, website, website_id, department, source_type, source_url, 
                summary, title, author, publish_date, full_text, is_paid, 
                attachment_type, attachment_url, language_type, 
                creator, updater, is_deleted
            ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            
            # 准备参数值 - 确保顺序和数量与 SQL 中的字段完全一致
            values = (
                item.get('keyword'),
                item.get('website', 'Nature'),  # 提供默认值
                item.get('website_id'),
                item.get('department'),
                item.get('source_type', 1),  # 提供默认值
                item.get('source_url'),
                item.get('summary'),  # 第7个字段
                item.get('title'),    # 第8个字段
                ', '.join(item.get('author', [])) if isinstance(item.get('author'), list) else item.get('author'),  # 第9个字段
                item.get('publish_date'),  # 第10个字段
                item.get('full_text'),     # 第11个字段
                item.get('is_paid', 0),    # 第12个字段
                item.get('attachment_type', 1),  # 第13个字段
                item.get('attachment_url'),      # 第14个字段
                item.get('language_type', 1),    # 第15个字段
                item.get('creator', 'system'),   # 第16个字段
                item.get('updater', 'system'),   # 第17个字段
                item.get('is_deleted', 0)        # 第18个字段
            )
            
            # 调试：打印所有值
            spider.logger.info(f"准备插入数据，参数数量: {len(values)}")
            fields = [
                'keyword', 'website', 'website_id', 'department', 'source_type', 'source_url',
                'summary', 'title', 'author', 'publish_date', 'full_text', 'is_paid',
                'attachment_type', 'attachment_url', 'language_type',
                'creator', 'updater', 'is_deleted'
            ]
            for i, (field, value) in enumerate(zip(fields, values)):
                spider.logger.info(f"  {i+1}. {field}: {repr(value)}")
            
            self.cursor.execute(sql, values)
            self.conn.commit()
            spider.logger.info("✅ 数据插入成功")
            
        except Exception as e:
            self.conn.rollback()
            spider.logger.error(f"❌ 插入数据失败: {e}")
            # 打印错误详情
            spider.logger.error(f"参数数量: {len(values)}")
            

    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()